package com.vates.vsp.entidades;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class Cliente implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long idCliente;
	private String nombre;
	private String nif;

	@Embedded
	private Direccion direccion;
	
	@OneToMany (mappedBy = "cliente", fetch = FetchType.EAGER, cascade = 
		{CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
	//@OneToMany(cascade = CascadeType.REMOVE, mappedBy = "cliente", fetch = FetchType.EAGER)
	private List<Reserva> reservas;

	public Cliente() {
		this.direccion = new Direccion();
	}

	public Cliente(String nombre, String nif, Direccion direccion) {
		this.nombre = nombre;
		this.nif = nif;
		this.direccion = direccion;
	}

	public Cliente(String nombre, String nif, String domicilio,
			String codPostal, String localidad, String provincia) {
		this.nombre = nombre;
		this.nif = nif;
		this.direccion = new Direccion();
		this.direccion.setDomicilio(domicilio);
		this.direccion.setCodPostal(codPostal);
		this.direccion.setLocalidad(localidad);
		this.direccion.setProvincia(provincia);
	}

	public Long getIdCliente() {
		return this.idCliente;
	}

	public void setIdCliente(Long idCliente) {
		this.idCliente = idCliente;
	}

	public String getNif() {
		return this.nif;
	}

	public void setNif(String nif) {
		this.nif = nif;
	}

	public String getNombre() {
		return this.nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public Direccion getDireccion() {
		return direccion;
	}

	public void setDireccion(Direccion direccion) {
		this.direccion = direccion;
	}
	
	@Override
	public boolean equals(Object obj) {
		if(!(obj instanceof Cliente)) 
			return false;
		
		Cliente otro = (Cliente) obj;
		
		if(idCliente.equals(otro.idCliente))
			return true;
		else
			return false;
	}

	@Override
	public String toString() {
		return "Id: " + idCliente + "\nNombre: " + nombre + "\nNif: " + nif
				+ "\nDireccion: " + direccion;
	}

	public List<Reserva> getReservas() {
		return reservas;
	}

	public void setReservas(List<Reserva> reservas) {
		this.reservas = reservas;
	}

}